#include <cstdio>
#include <queue>

using namespace std;

struct Node
{
    int x, y, c, time;
    Node( ) { }
    Node( int _x, int _y, int _c, int _time )
        : x( _x ), y( _y ), c( _c ), time( _time ) { }
};

int n, m, t;
char map[ 2 ][ 11 ][ 11 ];
queue<Node> q;
bool visit[ 2 ][ 11 ][ 11 ];

void init( )
{
    int i, j;
    scanf("%d%d%d", &n, &m, &t);
    for ( i = 0; i < 2; i++ )
        for ( j = 0; j < n; j++ )
            scanf("%s", map[ i ][ j ]);
    for ( i = 0; i < n; i++ )
        for ( j = 0; j < m; j++ )
            visit[ 0 ][ i ][ j ] = visit[ 1 ][ i ][ j ] = false;
}

void move( int x, int y, int c, int time )
{
    if ( x < 0 || y < 0 || x >= n || y >= m )
        return ;
    if ( visit[ c ][ x ][ y ] )
        return ;
    if ( map[ c ][ x ][ y ] == '*' )
        return ;
    visit[ c ][ x ][ y ] = true;
    if ( map[ c ][ x ][ y ] == '#' )
    {
        c ^= 1;
        if ( map[ c ][ x ][ y ] == '*' || visit[ c ][ x ][ y ] || map[ c ][ x ][ y ] == '#' )
            return ;
        q.push( Node( x, y, c, time ) );
    }
    else
        q.push( Node( x, y, c, time ) );
}

void bfs( )
{
    bool cor = false;
    int i, j;
    Node p;
    visit[ 0 ][ 0 ][ 0 ] = true;
    while ( !q.empty( ) )
        q.pop( );
    q.push( Node( 0, 0, 0, 0 ) );
    while ( !q.empty( ) )
    {
        p = q.front( );
        q.pop( );
        if ( p.time > t )
            break;
        if ( map[ p.c ][ p.x ][ p.y ] == 'P' )
        {
            cor = true;
            break;
        }
        move( p.x + 1, p.y, p.c, p.time + 1 );
        move( p.x - 1, p.y, p.c, p.time + 1 );
        move( p.x, p.y + 1, p.c, p.time + 1 );
        move( p.x, p.y - 1, p.c, p.time + 1 );
    }
    if ( cor )
        puts("YES");
    else
        puts("NO");
}

int main( )
{
    int c;
    scanf("%d", &c);
    while ( c-- )
    {
        init( );
        bfs( );
    }
    return 0;
}
